import { defineStore } from 'pinia'
import request from '@/utils/request'
import { ApiResObj } from '@/types/data'
import { Profile } from '@/types/user'
import { getProfile, setProfile, removeProfile } from '@/utils/storage'
import useStore from '..'
export default defineStore('user', {
  state() {
    return {
      profile: getProfile() as Profile
    }
  },
  actions: {
    // 账号+密码发送登录请求
    async login(obj: { account: string, password: string }) {
      const res = await request.post<ApiResObj<Profile>>('/login', obj)
      this.profile = res.data.result
      setProfile(res.data.result)
      // 登录成功后合并购物车
      const { cart } = useStore()
      cart.mergeCart()
    },
    // 手机号+验证码发送登录请求
    async mobileLogin(mobile: string, code: string) {
      const res = await request.post<ApiResObj<Profile>>('/login/code', { mobile, code })
      this.profile = res.data.result
      setProfile(res.data.result)
      // 登录成功后合并购物车
      const { cart } = useStore()
      cart.mergeCart()
    },
    // 校验openId
    async qqLogin(unionId: string, source: number = 6) {
      const res = await request.post<ApiResObj<Profile>>('/login/social', { unionId, source })
      this.profile = res.data.result
      setProfile(res.data.result)
      // 登录成功后合并购物车
      const { cart } = useStore()
      cart.mergeCart()
    },
    // -- 绑定-- 已有手机账号发送验证码
    // 绑定qq的短信验证码
    async sendQQBindMsg(mobile: string) {
      await request.get('/login/social/code', {
        params: {
          mobile
        }
      })
    },
    // 已有手机号绑定 绑定QQ和手机号
    async qqBindLogin(openId: string, mobile: string, code: string) {
      const res = await request.post<ApiResObj<Profile>>('/login/social/bind', {
        mobile,
        code,
        unionId: openId
      })
      // 1. 保存用户信息到 state 中
      this.profile = res.data.result
      setProfile(res.data.result)
      // 登录成功后合并购物车
      const { cart } = useStore()
      cart.mergeCart()
    },
    // 获取短信验证码
    // 绑定qq的短信验证码
    async sendQQPathMsg(mobile: string) {
      await request.get('/register/code', {
        params: {
          mobile
        }
      })
    },
    // 完善资料登录  没有手机账号 没有QQ
    async qqPatchLogin(data: any) {
      const res = await request.post<ApiResObj<Profile>>(
        `/login/social/${data.openId}/complement`,
        data
      )
      // 1. 保存用户信息到 state 中
      this.profile = res.data.result
      setProfile(res.data.result)
      // 登录成功后合并购物车
      const { cart } = useStore()
      cart.mergeCart()
    },

    // 携带手机号获取验证码
    // 用手机号登录的时候 有两种情况
    // 1. 使用手机号+验证码登录 (默认注册) ==> 填写个人信息和手机号绑定 ==> 给到账号  下次登录可以使用账号去登录
    // 2. 使用手机号去登录 ==> 直接登录不上(数据库中没有对应手机号记录) ==> 注册 => 再使用手机号登录
    // 登录获取验证码
    async getCode(mobile: string) {
      await request.get<ApiResObj<Profile>>('/login/code', { params: { mobile } })
      /*await request({ method: 'get', url: '/login/code',params: { mobile }}) */
    },
    // 退出登录
    logout() {
      const { cart } = useStore()
      // 1. 清除本地个人信息
      removeProfile()
      // 2. 清除pinia
      // setProfile({} as Profile)
      this.profile = {} as Profile
      // 3. 清空购物车 跨模块操作
      cart.clearCart()
    }
  }
})